package com.atzxh.exer;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author 小红同学
 * @create 2023-05-03-21:51
 * @description
 */
public class DateUtil {
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");//  HH:mm:ss

    /**
     * 获取当前时间的LocalDateTime对象
     */
    public static LocalDateTime getCurrentDateTime() {
        return LocalDateTime.now();
    }

    /**
     * 获取当前年份
     */
    public static int getCurrentYear() {
        return LocalDateTime.now().getYear();
    }

    /**
     * 获取当前月份
     */
    public static int getCurrentMonth() {
        return LocalDateTime.now().getMonthValue();
    }

    /**
     * 获取当前日期
     */
    public static int getCurrentDay() {
        return LocalDateTime.now().getDayOfMonth();
    }

    /**
     * 获取当前小时
     */
    public static int getCurrentHour() {
        return LocalDateTime.now().getHour();
    }

    /**
     * 获取当前分钟
     */
    public static int getCurrentMinute() {
        return LocalDateTime.now().getMinute();
    }

    /**
     * 获取当前秒数
     */
    public static int getCurrentSecond() {
        return LocalDateTime.now().getSecond();
    }

    /**
     * 获取两个日期之间的时间差（秒）
     */
    public static long getTimeDifferenceInSeconds(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        Duration duration = Duration.between(dateTime1, dateTime2);
        return Math.abs(duration.getSeconds());
    }

    /**
     * 将Date对象转换成String
     */
    public static String dateToString(Date date) {
        LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), java.time.ZoneId.systemDefault());
        return localDateTime.format(FORMATTER);
    }

    /**
     * 将String类型转换成Date对象
     */
    public static Date stringToDate(String dateString) {
        LocalDateTime localDateTime = LocalDateTime.parse(dateString, FORMATTER);
        return Date.from(localDateTime.atZone(java.time.ZoneId.systemDefault()).toInstant());
    }

    /**
     * 将LocalDateTime对象转换成String类型
     */
    public static String localDateTimeToString(LocalDateTime localDateTime) {
        return localDateTime.format(FORMATTER);
    }

    /**
     * 将String类型转换成LocalDateTime对象
     */
    public static LocalDateTime stringToLocalDateTime(String dateString) {
        return LocalDateTime.parse(dateString, FORMATTER);
    }
    //    public static void main(String[] args) {
//
//        // 测试获取当前时间
//        LocalDateTime currentDateTime = DateUtil.getCurrentDateTime();
//        System.out.println("当前时间：" + currentDateTime);
//
//        // 测试获取当前年、月、日、时、分、秒
//        System.out.println("当前年：" + DateUtil.getCurrentYear());
//        System.out.println("当前月：" + DateUtil.getCurrentMonth());
//        System.out.println("当前日：" + DateUtil.getCurrentDay());
//        System.out.println("当前小时：" + DateUtil.getCurrentHour());
//        System.out.println("当前分钟：" + DateUtil.getCurrentMinute());
//        System.out.println("当前秒数：" + DateUtil.getCurrentSecond());
//
//        // 测试获取两个日期之间的时间差（秒）
//        LocalDateTime dateTime1 = LocalDateTime.of(2021, 9, 1, 10, 0, 0);
//        LocalDateTime dateTime2 = LocalDateTime.of(2021, 9, 1, 10, 0, 30);
//        long timeDifferenceInSeconds = DateUtil.getTimeDifferenceInSeconds(dateTime1, dateTime2);
//        System.out.println("dateTime1和dateTime2之间的时间差（秒）：" + timeDifferenceInSeconds);
//
//        // 测试将Date对象转换成String类型
//        Date date = new Date();
//        String dateString = DateUtil.dateToString(date);
//        System.out.println("Date对象转换成String类型：" + dateString);
//
//        // 测试将String类型转换成Date对象
//        Date newDate = DateUtil.stringToDate(dateString);
//        System.out.println("String类型转换成Date对象：" + newDate);
//
//        // 测试将LocalDateTime对象转换成String类型
//        String localDateTimeString = DateUtil.localDateTimeToString(currentDateTime);
//        System.out.println("LocalDateTime对象转换成String类型：" + localDateTimeString);
//
//        // 测试将String类型转换成LocalDateTime对象
//        LocalDateTime newLocalDateTime = DateUtil.stringToLocalDateTime(localDateTimeString);
//        System.out.println("String类型转换成LocalDateTime对象：" + newLocalDateTime);
//    }
}
